Client-Server মডেল এবং Socket হল কম্পিউটার নেটওয়ার্কিংয়ের দুটি মৌলিক ধারণা, যা ডিস্ট্রিবিউটেড সিস্টেম তৈরি করতে ব্যবহৃত হয়। এই মডেল এবং Socket এর ব্যবহার কীভাবে কাজ করে এবং এর বিভিন্ন দিক নিচে বিস্তারিত আলোচনা করা হলো।
Client-Server মডেল
Client-Server মডেল হল একটি নেটওয়ার্ক আর্কিটেকচার যেখানে ক্লায়েন্ট এবং সার্ভারের মধ্যে সম্পর্ক প্রতিষ্ঠিত হয়। এই মডেলে, ক্লায়েন্ট হল সেই পক্ষ যা পরিষেবা অনুরোধ করে, এবং সার্ভার হল সেই পক্ষ যা সেই পরিষেবা প্রদান করে।
বৈশিষ্ট্য
- ক্লায়েন্ট: সাধারণত ব্যবহারকারী ইন্টারফেস (UI) সহ থাকে এবং সার্ভারের কাছে অনুরোধ পাঠায়। এটি বিভিন্ন অ্যাপ্লিকেশন যেমন ব্রাউজার, মোবাইল অ্যাপ্লিকেশন হতে পারে।
- সার্ভার: এটি ক্লায়েন্ট থেকে আসা অনুরোধগুলি প্রক্রিয়া করে এবং ফলাফল প্রদান করে। সার্ভার সাধারণত একটি শক্তিশালী মেশিনে চলে যা একাধিক ক্লায়েন্টকে পরিষেবা প্রদান করে।
উদাহরণ
- ওয়েব সার্ভার: ব্রাউজার (ক্লায়েন্ট) HTTP অনুরোধ পাঠায় এবং সার্ভার (যেমন Apache, Nginx) সেই অনুরোধের ভিত্তিতে ওয়েব পেজ প্রদান করে।
- ডেটাবেস সার্ভার: একটি অ্যাপ্লিকেশন ক্লায়েন্ট ডেটা সংগ্রহের জন্য ডেটাবেস সার্ভারের কাছে SQL অনুরোধ পাঠায়।
Socket এর ব্যবহার
Socket হল একটি সফটওয়্যার কনসেপ্ট যা ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ স্থাপন করে। এটি নেটওয়ার্কের মাধ্যমে ডেটা পাঠানোর জন্য একটি এপিআই প্রদান করে। Socket ব্যবহার করে, বিভিন্ন প্রক্রিয়া বা অ্যাপ্লিকেশন একে অপরের সাথে যোগাযোগ করতে পারে।
Socket এর মৌলিক উপাদান
- IP Address: নেটওয়ার্কে একটি ডিভাইসের অনন্য ঠিকানা।
- Port Number: একটি নির্দিষ্ট পরিষেবার জন্য নির্ধারিত সংখ্যা, যা IP ঠিকানার সাথে যুক্ত হয়। এটি নির্ধারণ করে যে কোন পরিষেবা ব্যবহার করা হচ্ছে।
Socket Programming এর প্রক্রিয়া
- Socket তৈরি: ক্লায়েন্ট এবং সার্ভার উভয় পক্ষেই একটি Socket অবজেক্ট তৈরি করা হয়।
- সার্ভার বেঁধে রাখা: সার্ভার তার Socket কে একটি নির্দিষ্ট IP এবং Port Number দিয়ে বেঁধে রাখে।
- ক্লায়েন্ট সংযোগ: ক্লায়েন্ট সার্ভারের Socket এর সাথে সংযোগ স্থাপন করে।
- ডেটা পাঠানো এবং গ্রহণ: একবার সংযোগ হলে, ক্লায়েন্ট এবং সার্ভার একে অপরের সাথে তথ্য পাঠাতে এবং গ্রহণ করতে পারে।
- সংযোগ বিচ্ছিন্ন: কাজ শেষ হলে, সংযোগটি বিচ্ছিন্ন করা হয়।
উদাহরণ: Python এ Socket Programming
সার্ভার কোড
import socket
# সার্ভার সৃষ্টির জন্য Socket অবজেক্ট তৈরি
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# IP এবং Port দিয়ে বেঁধে রাখা
server_socket.bind(('localhost', 12345))
# সংযোগের জন্য অপেক্ষা করা
server_socket.listen(1)
print("Waiting for a connection...")
# ক্লায়েন্টের সাথে সংযোগ স্থাপন করা
client_socket, client_address = server_socket.accept()
print(f"Connection established with {client_address}")
# ডেটা গ্রহণ করা
data = client_socket.recv(1024)
print(f"Received: {data.decode()}")
# ক্লায়েন্টকে উত্তর দেওয়া
client_socket.sendall("Hello from server!".encode())
# সংযোগ বন্ধ করা
client_socket.close()
server_socket.close()
ক্লায়েন্ট কোড
import socket
# ক্লায়েন্ট Socket তৈরি
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# সার্ভারের সাথে সংযোগ স্থাপন
client_socket.connect(('localhost', 12345))
# সার্ভারকে বার্তা পাঠানো
client_socket.sendall("Hello from client!".encode())
# সার্ভার থেকে উত্তর গ্রহণ করা
data = client_socket.recv(1024)
print(f"Received: {data.decode()}")
# সংযোগ বন্ধ করা
client_socket.close()
কোডের ব্যাখ্যা
- সার্ভার: একটি Socket তৈরি করে, নির্দিষ্ট IP এবং Port Number দিয়ে বেঁধে রাখে। ক্লায়েন্টের সাথে সংযোগ স্থাপন করার জন্য অপেক্ষা করে এবং ডেটা গ্রহণ করে।
- ক্লায়েন্ট: একটি Socket তৈরি করে, সার্ভারের সাথে সংযোগ স্থাপন করে এবং একটি বার্তা পাঠায়। সার্ভার থেকে একটি উত্তর গ্রহণ করে।
উপসংহার
Client-Server মডেল এবং Socket হল সফটওয়্যার এবং নেটওয়ার্ক ডিজাইনের গুরুত্বপূর্ণ ধারণা। Client-Server মডেল ব্যবহার করে বিভিন্ন অ্যাপ্লিকেশনগুলির মধ্যে কার্যকর যোগাযোগ প্রতিষ্ঠা করা হয়, যেখানে Socket যোগাযোগের প্রযুক্তি হিসেবে কাজ করে। এই প্রযুক্তিগুলি বিভিন্ন ক্ষেত্রে যেমন ওয়েব সার্ভিস, ডেটাবেস অ্যাক্সেস, এবং ডিসট্রিবিউটেড অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়।
Read more